import pandas as pd


DOC_QA_EXAMPLES = {}
QA_GENERATOR_EXAMPLES = {}


def load_examples():
    global DOC_QA_EXAMPLES, QA_GENERATOR_EXAMPLES
    doc_qa_df = pd.read_excel("./模型演示.xlsx", sheet_name="基于文档问答")
    for _, row in doc_qa_df.iterrows():
        if not pd.isna(row["输入"]):
            DOC_QA_EXAMPLES.setdefault(row["输入"], []).append(
                {
                    "文档片段名称": row["文档片段名称"],
                    "文档片段内容": row["文档片段内容"],
                }
            )

    qa_generator_df = pd.read_excel("./模型演示.xlsx", sheet_name="生成QA对")
    for _, row in qa_generator_df.iterrows():
        if not pd.isna(row["输入"]):
            QA_GENERATOR_EXAMPLES[row["输入"][:10] + "..."] = row["输入"]

    print(f"QA_GENERATOR_EXAMPLES: {QA_GENERATOR_EXAMPLES}")


EXTRACTION_EXAMPLES = {
    "第一条合同当...": {
        "input": "第一条合同当事人：\n出卖人：北京房房房地产开发有限公司\n通讯地址：北京市朝阳区长安路8899号\n委托销售经纪机构：北京好房中介服务有限公司\n通讯地址：北京市海淀区朝阳路南大街19号 邮政编码：100081\n营业执照注册号：110108119876543\n经纪机构备案证明号：JB202411008\n法定代表人：王刚\n联系电话：010-66778899\n买受人：王小豆\n户籍所在地：中国，北京\n证件类型：【居民身份证】，证号：110101198801011256\n出生日期：1988年1月1日，\n性别：男\n通讯地址：北京市昌平区天通苑街道20号\n邮政编码：100010\n联系电话：13888138999\n\n第二条商品房基本情况：\n\n该商品房的规划用途为【住宅】。该商品房所在建筑物的主体结构为钢筋混凝土，建筑总层数为28层，其中地上26层，地下2层。\n该商品房位于北京市西城区雅琴园小区8号楼2单元9层909号。该商品房的平面图见附件二。\n该商品房的房产测绘机构为北京市建设测绘，真实测建筑面积共120平方米，其中套内建筑面积100平方米，分摊共有建筑面积20平方米。该商品房共用部位见附件二。\n该商品房层高为2.8米，有2个阳台，其中1个阳台为封闭式，1个阳台为非封闭式。阳台是否封闭以规划设计文件为准。\n\n第三条计价方式与价款：\n出卖人与买受人按照下列第1种方式计算该商品房价款：\n1.按照套内建筑面积计算，该商品房单价为每平方米30000（币种：人民币）元，总价款为3000000（币种：人民币）元（大写叁佰万元整）。\n2.按照建筑面积计算，该商品房单价为每平方米（币种）元，总价款为（币种）元（大写元整）。\n3.按照套计算，该商品房总价款为（币种）元（大写元整）。\n4.按照计算，该商品房总价款为（币种）元（大写元整）。\n\n第四条付款方式及期限：\n（一）签订本合同前，买受人已向出卖人支付定金2000000（币种：人民币）元（大写），该定金于【本合同签订】时【抵作】商品房价款。\n（二）买受人采取下列第1种方式付款：\n1.一次性付款。买受人应当在2024年1月31日前支付该商品房全部价款。\n2.分期付款。买受人应当在年月日前分期支付该商品房全部价款，首期房价款（币种）元（大写：元整），应当于年月日前支付。\n3.贷款方式付款：【公积金贷款】【商业贷款】【】。买受人应当于年月日前支付首期房价款（币种）元（大写元整），占全部房价款的％。余款（币种）元（大写元整）向（贷款机构）申请贷款支付。\n\n第五条交付时间和手续：\n\n（一）出卖人应当在2024年6月30日前向买受人交付该商品房。\n（二）该商品房达到第十条、第十一条约定的交付条件后，出卖人应当在交付日期届满前10日（不少于10日）将查验房屋的时间、办理交付手续的时间地点以及应当携带的证件材料的通知书面送达买受人。买受人未收到交付通知书的，以本合同约定的交付日期届满之日为办理交付手续的时间，以该商品房所在地为办理交付手续的地点。。交付该商品房时，出卖人应当出示满足第十条约定的证明文件。出卖人不出示证明文件或者出示的证明文件不齐全，不能满足第十条约定条件的，买受人有权拒绝接收，由此产生的逾期交付责任由出卖人承担，并按照第十三条处理。",
        "fields": [
            {"字段名称": "房屋情况", "字段描述": "该合同中商品房基本情况如占地面积、地址等信息"},
            {
                "字段名称": "分摊面积",
                "字段描述": "该合同中的分摊共有建筑面积",
            },
            {"字段名称": "单价", "字段描述": "该合同中商品房单价"},
            {"字段名称": "定金", "字段描述": "该合同中签订本合同前，买受人已向出卖人支付的定金"},
        ],
    },
    '发票编号: IN...': {
        "input": '发票编号: INV20220109\n日期: 2022年1月9日\n供应商名称: XYZ餐厅\n供应商地址: 789号街道，城市石家庄，省份河北，邮编466200\n供应商电话: 1234567890\n供应商税号: 1234567890\n公司名称: ABC公司\n公司地址: 456号街道，城市，省份，邮编\n公司电话: 9876543210\n公司税号: 0987654321\n\n项目列表:\n---------------------------------------\n序号 项目名称 数量 单价 总价\n---------------------------------------\n1 晚宴 10 500 5000\n2 饮料 20 50 1000\n3 蛋糕 1 200 200\n---------------------------------------\n合计金额: 6200\n税额: 620\n总金额: 6820\n\n付款方式: 公司账户支付\n付款日期: 2022年1月15日\n\n备注: 感谢您的光临！期待再次为您提供优质的服务。',
        "fields": [
            {
                "字段名称": "公司税号",
                "字段描述": "公司的纳税编号",
            },
            {"字段名称": "供应商地点", "字段描述": "供应商的所在位置"},
            {
                "字段名称": "支付日期",
                "字段描述": "本发票中的订单的付款时间",
            },
        ],
    },
    '发件人：John...': {
        "input": '发件人：John Smith\n发件人邮箱：john.smith@example.com\n收件人：Jane Doe\n收件人邮箱：jane.doe@example.com\n主题：邀请参加公司年度晚宴\n亲爱的Jane Doe,\n我希望这封邮件能够找到你身体健康、一切顺利。我写信是为了邀请你参加我们公司即将举行的年度晚宴。\n活动详情如下：\n日期：2024年1月15日\n时间：晚上7点至10点\n地点：ABC酒店大宴会厅\n我们精心策划了这个晚宴，旨在庆祝公司过去一年的成就，感谢所有员工的辛勤工作。我们相信你的参与将为晚宴增添更多的精彩和价值。\n在晚宴中，我们将提供美味的晚餐、精彩的表演和丰富的互动环节。此外，您还将有机会与其他同事进行交流、建立更紧密的联系。\n请在2024年1月10日前回复此邮件，告知您是否能够参加。如果您有任何问题或需要进一步的信息，请随时与我联系。\n我们非常期待您的光临，并与您一同度过这个特殊的时刻。\n谢谢！\n最诚挚的问候，\nJohn Smith\n公司活动组织者\n联系方式：123-456-7890\njohn.smith@example.com',
        "fields": [
            {
                "字段名称": "发件人",
                "字段描述": "发件人的姓名",
            },
            {"字段名称": "发件人邮箱", "字段描述": "发件人的邮箱地址"},
            {
                "字段名称": "联系方式",
                "字段描述": "活动组织者的联系电话",
            },
            {
                "字段名称": "宴会地址",
                "字段描述": "举行宴会的地点",
            },
        ],
    },
}


def preprocess_docqa_examples(text):
    contexts = DOC_QA_EXAMPLES.get(text, [])
    df = pd.DataFrame(contexts, columns=["文档片段内容", "文档片段名称"])
    return df


def preprocess_qa_generator_examples(text):
    return QA_GENERATOR_EXAMPLES.get(text, "")


def preprocess_extraction_examples(text):
    input_text = EXTRACTION_EXAMPLES.get(text, {}).get("input", "")
    df = pd.DataFrame(EXTRACTION_EXAMPLES.get(text, {}).get("fields", []), columns=["字段名称", "字段描述"])

    return input_text, df
